Add another multi-device invariant
authorMatthias Clasen <mclasen@redhat.com>
Tue, 28 Oct 2014 04:54:39 +0000 (00:54 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 28 Oct 2014 04:54:39 +0000 (00:54 -0400)
The device and window passed to gdk_device_grab() must be
on the same display, or things are unlikely to work.
Document and assert this.

gdk/gdkdevice.c

index 3c9cf672eee3aa32ef26612da2f649610976ec28..f71ff504855e96870e452283eebfc92e4db8f6ca 100644 (file)
@@ -1260,6 +1260,8 @@ get_native_grab_event_mask (GdkEventMask grab_mask)
  * or the window becomes unviewable. This overrides any previous grab on the device
  * by this client.
  *
+ * Note that @device and @window need to be on the same display.
+ *
  * Device grabs are used for operations which need complete control over the
  * given device events (either pointer or keyboard). For example in GTK+ this
  * is used for Drag and Drop operations, popup menus and such.
@@ -1293,6 +1295,7 @@ gdk_device_grab (GdkDevice        *device,
 
   g_return_val_if_fail (GDK_IS_DEVICE (device), GDK_GRAB_FAILED);
   g_return_val_if_fail (GDK_IS_WINDOW (window), GDK_GRAB_FAILED);
+  g_return_val_if_fail (gdk_window_get_display (window) == gdk_device_get_display (device), GDK_GRAB_FAILED);
 
   native = gdk_window_get_toplevel (window);